package cn.tedu.executorservice;

import java.util.concurrent.*;

public class ExecutorServiceDemo {
    public static void main(String[] args) {
        ExecutorService es = new ThreadPoolExecutor(
                7, // 7个核心线程
                15, // 7个核心线程 + 8个临时线程
                5, // 表示临时线程用完之后存活5秒，如果超过5秒没有接到新的任务，则进行销毁
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<Runnable>(5),
                new RejectedExecutionHandler() {
                    @Override
                    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                        // 实际过程中，拒绝会根据不同场景有对应的流程
                        System.out.println("--拒绝执行" + r);
                    }
                }
        );

        // 可以将这个任务交给线程池执行
        for (int i = 0; i < 22; ++i) {
            es.execute(new ESThread());
        }

        // 关闭线程池，实际开发中，线程池应该是开了以后就不再关闭
        es.shutdown();
    }
}

class ESThread implements Runnable {
    @Override
    public void run() {
        System.out.println("开始执行" + this);
        try {
            Thread.sleep(3000);
        } catch (InterruptedException interruptedException) {
            interruptedException.printStackTrace();
        }
        System.out.println("执行结束" + this);
    }
}
